// sensors(神策采集方案)适配层
import sensors from './sensorsdata.es6.min.js'; // 神策数据采集SDK

/**
 * 初始化方法
 */
function init() {
  sensors.init({
    // 数据接收地址
    // server_url: 'https://ubpdata.test.geely.com/sa?project=gri_rdc', // UAT环境
    server_url: 'https://ubpdata.geely.com/sa?project=gri_rdc', // 生产环境
    // 单页面配置，默认开启，若页面中有锚点设计，需要将该配置删除，否则触发锚点会多触发 $pageview 事件
    is_track_single_page: true,
    use_client_time: true,
    send_type: 'beacon',
    // 页面上有事件触发时，浏览器开发者工具会打印采集的事件信息
    show_log: false,
    heatmap: {
      // 是否开启点击图，default 表示开启，自动采集 $WebClick 事件，可以设置 'not_collect' 表示关闭。
      clickmap: 'default',
      // 是否开启触达图，not_collect 表示关闭，不会自动采集 $WebStay 事件，可以设置 'default' 表示开启。
      scroll_notice_map: 'default',
    },
  });
}

/**
 * 设置事件公共属性
 * 对于所有事件都需要添加的属性
 * 可在初始化 SDK 后，autoTrack() 前，调用 registerPage() 将属性注册为公共属性
 * @param {object} globalProperties 额外的公共属性
 */
function registerPage(globalProperties: object = {}) {
  sensors.registerPage({
    // 必须的公共属性：接入系统名称，平台唯一标识
    platform: 'geely-GBOM',
    ...globalProperties,
  });
}

/**
 * 用于采集 $pageview 事件。
 * vue下因为首页打开时候就会默认触发页面更新，所以不需要调用
 */
function autoTrack() {
  sensors.quick('autoTrack');
}

/**
 * 当用户注册成功或登录成功时，需要调用login()方法进行用户关联
 * @param {string} id 登录 ID，标志用户唯一的id
 */
function login(id: string) {
  sensors.login(id);
}

/**
 * 设置用户属性，如果存在则覆盖
 * @param {object} obj 用户属性
 */
function setProfile(obj: object) {
  sensors.setProfile(obj);
}

/**
 * 自定义事件追踪
 * @param {string} key 自定义事件名称
 * @param {object} obj 自定义事件属性
 */
function track(key: string, obj: object) {
  sensors.track(key, obj);
}

export default {
  init,
  login,
  setProfile,
  sensors,
  autoTrack,
  registerPage,
  track,
};
